
# 列表

# 截取
lst=[10,20,30,40,50,60,70,80]
# 截取索引 1-6 片段，步长为1 start=1 stop=6 step=1
lst1 = lst[1:6:1]
print('索引 1-6 片段，步长为1', lst1, id(lst1))
# 默认步长，获取索引 1-6 片段 start=1 stop=6
lst2 = lst[1:6]
print('默认步长，获取索引 1-6 片段', lst2,id(lst2))
# start=1 stop=6 step=2
print('步长为2，获取索引 1-6 片段', lst[1:6:2])
# stop=6 step=2  start采用默认
print('stop=6 step=2  start采用默认', lst[:6:2])
# start=1 step=2  stop采用默认
print('start=1 step=2  stop采用默认', lst[1::2])

# step 步长为负数， 反向获取
# 原列表
print('原列表',lst)
# start=： stop=： step=-1
print('start=： stop=： step=-1', lst[::-1])
# start=7 stop=: step=-1
print('start=7 stop=: step=-1', lst[7::-1])
# start=6 stop=0 step=-2
print('start=6 stop=0 step=-2', lst[6:0:-2])


# 判断

# in  &  not in
print('java' in 'java78.com') # True
print('java23' not in 'java78.com') # True
lst = ['i love','java78.com','但是','他爱','python', 520]
print('java78 in lst','java78' in lst)
print('python in lst','python' in lst)
print('python520 in lst','python520' in lst)
print('78 not in lst','78' not in lst)
print('java78 not in lst','java78' not in lst)
print('520 not in lst',520 not in lst)

# 遍历
lst = ['i love','java78.com','但是','他爱','python', 520]

for item in lst:
   print(item)


# 增加
lst = ['i love','java78.com']
print('追加前',id(lst))
# 追加
lst.append("who?")
print('追加后',lst,id(lst)) # 追加之后列表id未发生变化，还是同一列表
# 扩展
lst2=['hello','java78.com']
lst.extend(lst2)
print('扩展追加后',lst,id(lst)) # 扩展追加之后列表id未发生变化，还是同一列表
# 插入
# 指定索引位置插入数据
lst.insert(3,'it\'s me')
print('插入后',lst,id(lst)) # 列表插入元素 id未发生变化，还是同一列表
# 截取
lst[1:] = ['截取数据']
print('截取后',lst,id(lst))


# 删除
lst = ['i love','java78.com',10,520,'python','list','787878',123]
print('原始列表',lst,id(lst))
# remove
lst.remove('java78.com')
print('remove后',lst,id(lst))
# lst.remove('100') # remove不存在元素抛出错误 ValueError: list.remove(x): x not in list
# pop() 根据索引移除元素
lst.pop(1)
print('pop(1)',lst,id(lst))
# lst.pop(18) # pop 不存在索引抛出错误 IndexError: pop index out of range
lst.pop() # 不指定索引默认删除最后一个元素
print('pop()删除最后一个元素',lst,id(lst))
# 截取 赋值空列表，将会删除原来的值
lst[1:4] = []
print('lst[1:2] = [] - >',lst,id(lst))
# clear 清空列表
lst.clear()
print('clear 清空列表 - >',lst,id(lst))
# del 删除列表
del lst
# print('del lst - >',lst,id(lst)) # 已经删除的列表，在打印它 抛出错误 NameError: name 'lst' is not defined


# 修改
lst=[10,20,30,40]
print('修改前',lst,id(lst))
# 修改单个元素
lst[1]=1000
print('修改单个元素',lst,id(lst))
# 截取修改
lst[1:3]=[40,30,20,200]
print('截取修改',lst,id(lst))


# 排序
lst=[10,20,100,27,23,90,30,40]
print('排序前',lst,id(lst))
# sort()方法调用，默认升序
lst.sort()
print('升序排序',lst,id(lst)) # 升序后，列表id未变，还是同一列表
# 降序 reverse=True 来控制降序
lst.sort(reverse=True)
print('降序排序',lst,id(lst)) # 降序后，列表id未变，还是同一列表

# 内置函数sorted(),产生新的列表
lst1=sorted(lst)
print('内置函数sorted升序排序',lst1,id(lst1)) # 升序排序后，列表id变化，是新列表
# 内置函数sorted(), 降序 reverse=True
lst2=sorted(lst,reverse=True)
print('内置函数sorted降序排序',lst2,id(lst2))


# 列表生成公式
lst = [i*i for i in range(1,10)]
print(lst)
# 使用列表生成公式需要一定格式，举例 2，4，6，8，10
lst2 = [i*2 for i in range(1,6)]
print(lst2)
